package math;

import java.util.HashSet;
import java.util.Set;

/**
 * 一个 平方和三元组 (a,b,c) 指的是满足 a2 + b2 = c2 的 整数 三元组 a，b 和 c 。
 * 给你一个整数 n ，请你返回满足 1 <= a, b, c <= n 的 平方和三元组 的数目。
 * <p>
 * 示例 1：
 * 输入：n = 5
 * 输出：2
 * 解释：平方和三元组为 (3,4,5) 和 (4,3,5) 。
 * <p>
 * 示例 2：
 * 输入：n = 10
 * 输出：4
 * 解释：平方和三元组为 (3,4,5)，(4,3,5)，(6,8,10) 和 (8,6,10) 。
 *
 * @author Jisheng Huang
 * @version 20250514
 */
public class CountTriples_1925 {
    public static int countTriples(int n) {
        int ans = 0;
        Set<Integer> set = new HashSet<>();
        int[] arr = new int[n + 1];

        for (int i = 1; i <= n; ++i) {
            arr[i] = i * i;
            set.add(arr[i]);
        }

        for (int i = 5; i <= n; ++i) {
            int t = (int) Math.sqrt(arr[i] / 2) + 1;

            for (; t < i; ++t) {
                if (set.contains(arr[i] - arr[t])) {
                    ++ans;
                }
            }
        }

        return ans * 2;
    }

    public static void main(String[] args) {
        System.out.println(countTriples(5));
        System.out.println(countTriples(10));
    }
}
